//////////////////////////////////////////////////////////////////////////

#include "timer.h"

//////////////////////////////////////////////////////////////////////////

#include <boost/asio.hpp>

//////////////////////////////////////////////////////////////////////////


Timer::Timer()
{
}


//////////////////////////////////////////////////////////////////////////


Timer::~Timer()
{
}


//////////////////////////////////////////////////////////////////////////


void Timer::Start()
{
    Reset();
}


//////////////////////////////////////////////////////////////////////////


void Timer::Pause()
{
    // Not implemented yet
}


//////////////////////////////////////////////////////////////////////////


void Timer::Reset()
{
    m_Begin = clock();
}


//////////////////////////////////////////////////////////////////////////


int Timer::Milliseconds() const
{
    const int CLOCKS_PER_MILLISEC = CLOCKS_PER_SEC / 1000;
    return (clock() - m_Begin) * CLOCKS_PER_MILLISEC;
}


//////////////////////////////////////////////////////////////////////////


void Timer::Delay( int _milliseconds )
{
    // IO service for deadline timer
    static boost::asio::io_service io_service;

    // Deadline timer
    boost::asio::deadline_timer timer(io_service);

    // Blocking wait
    timer.expires_from_now( boost::posix_time::milliseconds(_milliseconds) );
    timer.wait();
}


//////////////////////////////////////////////////////////////////////////


void Timer::Delay( clock_t _clocks )
{
    Delay( static_cast<int>(CLOCKS_PER_SEC/1000 * _clocks) );
}


//////////////////////////////////////////////////////////////////////////